package de.preiscrawler.parser.artikeldetail;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Set;

import net.htmlparser.jericho.Element;
import net.htmlparser.jericho.Source;
import de.preisrobot.business.parser.AbstractArtikelDetailParser;
import de.preisrobot.entity.ArtikelDetail;
import de.preisrobot.entity.ArtikelProperty;
import de.preisrobot.service.internal.PreisRobotParserException;

public class AmazonArtikelDetailParser extends AbstractArtikelDetailParser
{

   @Override
   protected Set<ArtikelProperty> parseArtikelEigenschaften(Element rootArtikelItem)
   {
      if(rootArtikelItem == null){
         System.err.println("konnte keine Produktinfo finden");
         return null;
      }
         
      List<Element> allElements = rootArtikelItem.getAllElements("li");
      
      for (Element element : allElements)
      {
         String string = element.getTextExtractor().toString();
         System.out.println(string);
      }
      return null;
   }

   @Override
   protected ArtikelDetail parseStream(InputStream in) throws IOException, PreisRobotParserException
   {
      ArtikelDetail d = new ArtikelDetail();
      Source s = new Source(in);
    
      String preis = parsePreis(s);
      List<Element> rootArtikelItem = s.getAllElementsByClass("bucket");
      Element element = findProductInformation(rootArtikelItem);
      
      Set<ArtikelProperty> eigenschaften = parseArtikelEigenschaften(element );
      
      d.setProperties(eigenschaften);
      d.setPreis(preis);
      
      return d;
   }

   private Element findProductInformation(List<Element> rootArtikelItem)
   {
     for (Element element : rootArtikelItem)
   {
      List<Element> allElements = element.getAllElements("h2");
      for (Element element2 : allElements)
      {
         if("Produktinformation".equals(element2.getTextExtractor().toString()))
            return  element;
      }
   }
      return null;
   }

   @Override
   protected String parsePreis(Source source)
   {
      Element dicPriceBlock = source.getElementById("priceBlock");
      List<Element> allElementsByClass = dicPriceBlock.getAllElementsByClass("priceLarge");
      Element element = allElementsByClass.get(0);
      String preis = element.getTextExtractor().toString();
      
      return preis;
   }

}
